﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using DevComponents.DotNetBar;
using DataAccessLayer;
using BusinessLogicLayer;
using Entities;
using Utilities;
using BusinessLogicLayer.Validation;
using QuanLyTKB_TienDoGD.In;

namespace QuanLyTKB_TienDoGD.QuanLyLopHoc
{
    public partial class frmQuanLyLopHoc : Office2007Form
    {
        /// <summary>
        /// khởi tạo thuật tính _repository
        /// </summary>
        private IRepository<LopHoc> _repository;
        /// <summary>
        /// khởi tạo thuật tính _manager
        /// </summary>
        private LopHocManager _manager;
        /// <summary>
        /// Tạo lập form lớp học
        /// </summary>
        public frmQuanLyLopHoc()
        {
            InitializeComponent();
        }
        /// <summary>
        /// hàm load form lớp học
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void frmQuanLyLopHoc_Load(object sender, EventArgs e)
        {
            _repository = new Repository<LopHoc>();
            _manager = new LopHocManager(_repository);
            ds = LopHoc.Repository.Query("select * from LopHoc");
            dgvQuanLyLopHoc.DataSource = ds;
        }
        /// <summary>
        /// Tạo đối tượng lớp học
        /// </summary>
        List<LopHoc> ds = new List<LopHoc>();
        /// <summary>
        /// Hàm thêm lớp học
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void btnThem_Click_1(object sender, EventArgs e)
        {
            var frm = new frmAddLopHoc(_manager, this);
            frm.ShowDialog();
            dgvQuanLyLopHoc.DataSource = _repository.GetAll().ToList();
        }
        /// <summary>
        /// Hàm làm mới lớp học
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void btnLamMoi_Click_1(object sender, EventArgs e)
        {

            ds = LopHoc.Repository.Query("select * from LopHoc");
            dgvQuanLyLopHoc.DataSource = ds;
        }
        /// <summary>
        /// Hàm kiểm tra sự thay đổi 
        /// </summary>
        /// <param name="kt"></param>
        /// <returns></returns>
        private bool KiemTraSuThayDoi(LopHoc kt)
        {
            DataGridViewRow row = dgvQuanLyLopHoc.SelectedRows[0];
            LopHoc lh = new LopHoc();
            lh = LopHoc.Repository.GetByID(row.Cells[1].Value.ToString());
            if (lh.SiSo == kt.SiSo) return false;
            return true;

        }
        private void dgvQuanLyLopHoc_CellContentClick(object sender, DataGridViewCellEventArgs e)
        {


            //if (e.ColumnIndex == 4)
            //{

            //    if (MessageBox.Show("Bạn có muốn cập nhật lại?", "Cập nhật lớp học", MessageBoxButtons.OKCancel, MessageBoxIcon.Warning, MessageBoxDefaultButton.Button1) == DialogResult.Cancel)
            //    {
            //        btnLamMoi.PerformClick();
            //        return;
            //    }
            //    LopHoc lh = new LopHoc();
            //    lh.MaLop = dgvQuanLyLopHoc.Rows[e.RowIndex].Cells[1].Value.ToString();
            //    if ((int)dgvQuanLyLopHoc.Rows[e.RowIndex].Cells[2].Value <= 0 || dgvQuanLyLopHoc.Rows[e.RowIndex].Cells[2].Value.ToString() == "")
            //    {
            //        MessageBox.Show(" Sỉ số phải lơn hơn 0 và khác rổng!");
            //        btnLamMoi.PerformClick();
            //        return;
            //    }
            //    lh.SiSo = (int)dgvQuanLyLopHoc.Rows[e.RowIndex].Cells[2].Value;
            //    if (!KiemTraSuThayDoi(lh))
            //    {
            //        MessageBox.Show("Không có sự thay đổi nào");
            //        return;
            //    }
            //    try
            //    {
            //        if (LopHoc.Repository.Update(lh))
            //        {
            //            MessageBox.Show("Sửa thành công");
            //        }
            //    }

            //    catch (Exception)
            //    {
            //        MessageBox.Show("Sửa không thành công");

            //    }
            //}
        }
        /// <summary>
        /// kiểm tra sự thay đổi của tất cả phần tử
        /// </summary>
        /// <returns></returns>
        private bool KiemTraSuThayDoiCuaTatca()
        {
            foreach (DataGridViewRow row in dgvQuanLyLopHoc.Rows)
            {
                int SiSo = (int)row.Cells[2].Value;
                if (LopHoc.Repository.GetByID(row.Cells[1].Value.ToString()).SiSo != SiSo) return true;
            }
            return false;
        }
        /// <summary>
        /// Hàm cập nhật lớp học
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void btnCapNhat_Click(object sender, EventArgs e)
        {
           
            if (MessageBox.Show("Bạn có muốn cập nhật lại?", "Cập nhật lớp học", MessageBoxButtons.OKCancel, MessageBoxIcon.Warning, MessageBoxDefaultButton.Button1) == DialogResult.Cancel)
            {
                btnLamMoi.PerformClick();
                return;
            }
            if (!KiemTraSuThayDoiCuaTatca())
            {
                MessageBox.Show("Không có sự thay đổi nào");
                return;
            }
            LopHoc lh = new LopHoc();
            foreach (DataGridViewRow row in dgvQuanLyLopHoc.Rows)
            {
                lh.MaLop = row.Cells[1].Value.ToString();
                lh.SiSo = (int)row.Cells[2].Value;
                if (lh.SiSo <= 0)
                {
                    MessageBox.Show("Sỉ số phải lớn hơn 0 và khác rổng");
                    return;
                }
                try
                {
                    LopHoc.Repository.Update(lh);
                }
                catch (Exception)
                {

                }
            }
            MessageBox.Show("Đã cập nhật xong!");
        }
        /// <summary>
        /// hàm xóa lớp học
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void btnXoa_Click(object sender, EventArgs e)
        {
            if (MessageBox.Show("Bạn có muốn xóa các lớp học đã chọn?", "Xóa lớp học", MessageBoxButtons.OKCancel, MessageBoxIcon.Warning, MessageBoxDefaultButton.Button1) == DialogResult.Cancel)
                return;
            foreach (DataGridViewRow row in dgvQuanLyLopHoc.Rows)
            {
                if (row.Cells[0].Value != null && row.Cells[0].Value.Equals(true))
                {
                    var aResult = _manager.Delete(row.Cells[1].Value.ToString());
                    if (aResult.Success) MessageBox.Show("Xóa thành công!");
                    else MessageBox.Show("Dữ liệu lớp học này đang được sử dụng!", "Cảnh báo", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                }
            }
            dgvQuanLyLopHoc.DataSource = _repository.GetAll().ToList();
        }
        /// <summary>
        /// hàm tìm kiếm lớp học
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void txtTenLH_TextChanged(object sender, EventArgs e)
        {
            var aResult = _manager.Find(s => s.MaLop.IndexOf(txtTenLH.Text) >= 0);
            if (aResult.Success)
                dgvQuanLyLopHoc.DataSource = aResult.Result;
            else
                dgvQuanLyLopHoc.DataSource = null;
        }

        private void btnTimKiem_Click(object sender, EventArgs e)
        {
            frmInLopHoc frm = new frmInLopHoc();
            frm.Show();
        }
    }
}
